home *** CD-ROM | disk | FTP | other *** search
/ Merciful 5 / Merciful - Disc 5.iso / software / p / pcqpascalv1.2d.lha / Examples2 / Mouse / mouse.p
Encoding:
Text File  |  1997-05-06  |  2.5 KB  |  97 lines

  1. program mouse;
  2.  
  3. { -----------  Mouse.p (PCQ1.2b), 1992 by "Diesel" B. Künnen  -------------
  4.  
  5.   Nur mal, um zu zeigen, wie man seinem eigenen oder einem anderen 
  6.   Window einen neuen Mauszeiger verpaßt. Das Programm an sich ist
  7.   Public Domain. ( Naaaa, wer malt den schönsten Mauszeiger ??? )
  8.  
  9.   MS/PCQ-central, 26.06.1992
  10. }
  11.  
  12.  
  13. {$I "include:exec/memory.i" }
  14. {$I "include:exec/libraries.i" }
  15. {$I "include:intuition/intuition.i" }
  16. {$I "include:intuition/intuitionbase.i" }
  17. {$I "include:intuition/screens.i" }
  18. {$I "include:graphics/view.i" }
  19. {$I "include:libraries/dos.i" }
  20.  
  21.  
  22. Const    anzShorts : Short = 24;                { 24 Shorts = 48 bytes }
  23.  
  24.     ptrdata : ARRAY[1..anzShorts] Of Short =
  25.     (   0,     0,
  26.     %0000000000000000,    %0111111111110000,    { Sprite-data f. }
  27.     %1111111111110000,    %1111111111111000,    { den eigenen    }
  28.     %0111000000111000,    %0111100000111100,    { Mauszeiger     }
  29.     %0011000000011100,    %0011100000011110,
  30.     %0000000000000000,    %0000000000000000,
  31.     %1111111111111111,    %0000000000000000,
  32.     %0000000000000000,    %0000000000000000,
  33.     %0011000000011100,    %0011100000011110,
  34.     %0111000000111000,    %0111100000111100,
  35.     %1111111111110000,    %1111111111111000,
  36.         0,     0);
  37.  
  38.     DMemSize : Integer = 2 * Anzshorts;
  39.  
  40. Var
  41.     GfxBase,
  42.     DMem      : Address;
  43.     DScreen   : ScreenPtr;
  44.     DWindow   : WindowPtr;
  45.     IntuiBase : IntuitionBasePtr;
  46.  
  47.  
  48. { --- Zum sauberen verlassen des Programms, egal ab wo ... --- }
  49.  
  50. Procedure CleanExit(why: String; rt : Integer);
  51. Begin
  52.     If DMem<>NIL then FreeMem(DMem,DMemsize);
  53.     If GfxBase<>NIL then CloseLibrary(GfxBase);
  54.     If IntuiBase<>NIL then CloseLibrary(LibraryPtr(IntuiBase));
  55. End;
  56.  
  57.  
  58.  
  59. { ------------- MAIN ------------- }
  60.  
  61.  
  62. Begin
  63.     { IntuitionBasePtr holen }
  64.     IntuiBase:=IntuitionBasePtr(Openlibrary("intuition.library",0));
  65.     If IntuiBase=NIL then CleanExit("No intui.lib\n",10);
  66.  
  67.     { GfxBasePtr holen, f. graphics-Routinen }
  68.     GfxBase:=Openlibrary("graphics.library",0);
  69.     If GfxBase=NIL then CleanExit("No gfx.lib\n",10);
  70.  
  71.     { ein wenig ChipMem (!) f. die Daten holen & dorthin kopieren }
  72.     DMem:=AllocMem(DMemsize,MEMF_Chip);
  73.     If DMem=NIL then CleanExit("No ChipMem\n",5);
  74.  
  75.     CopyMem(Adr(PtrData),DMem,DMemSize);
  76.  
  77.     { Ptr auf aktuelles Window/Screen holen }
  78.     DScreen:=IntuiBase^.ActiveScreen;
  79.     DWindow:=IntuiBase^.ActiveWindow;
  80.  
  81.     write("Zum Beenden Maus in linke obere Ecke führen\n");
  82.  
  83.     { Mauszeiger ändern }
  84.     SetPointer(DWindow, DMem, (anzShorts-4) Div 2, 16, -2, -2);
  85.  
  86.     { warten, bis Maus links oben }
  87.     repeat
  88.       Delay(10);
  89.     until (DScreen^.MouseX=0) AND (DScreen^.MouseY=0);
  90.  
  91.     { Mauszeiger zurücksetzen }
  92.     ClearPointer(DWindow);
  93.  
  94.     CleanExit(NIL,0);        { --- bye ... --- }
  95.  
  96. End.
  97.